package com.zmn.oms.dubbo.dto.zmn.third.zhimi;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;

/**
 * @author sunlife
 * @date:2020/5/6 5:53 下午
 * description:
 */
@Data
@ApiModel("智米VO")
public class ZhimiVO  implements Serializable {

    /**
     * 工单号
     */
    @ApiModelProperty("工单号")
    private Long workId;

    /**
     * 工单类型
     */
    @ApiModelProperty("智米工单服务类型，1:维修；2:退机;3:换机；4：检测；7：安装；8：勘测")
    private Integer serviceType;

    /**
     * SN码
     */
    @ApiModelProperty("SN码")
    private String sn;

    /**
     * 新SN码，仅换机时存在
     */
    @ApiModelProperty("新SN码，仅换机时存在")
    private String newSn;

    /**
     * 购机时间 ，仅维修时存在
     */
    @ApiModelProperty("购机时间 ，仅维修时存在")
    private String buyDate;

    /**
     * 重新下换机单标识 1:否； 2:是
     */
    @ApiModelProperty("重新下换机单标识 1:否； 2:是")
    private Integer reOrderExchange;

    /**
     * 保修类型(1 在保，2不在保)
     */
    @ApiModelProperty("保修类型")
    private Integer warranty;

    /**
     * 三级机型编码
     */
    @ApiModelProperty("三级机型编码")
    private String thirdModelCode;

    /**
     * 已申请配件信息
     */
    @ApiModelProperty("配件信息")
    private List<ZhimiPartVO> parts;

    /**
     * 故障信息
     */
    @ApiModelProperty("故障信息")
    private List<Fault> faults;

    /**
     * 收货地址信息
     */
    @ApiModelProperty("收货地址信息")
    private ZhimiAddressVO postAddress;

    /**
     * 旧件返厂物流信息
     */
    @ApiModelProperty("旧件返厂物流信息")
    private ReturnFactoryExpressVO returnFactoryExpress;

    /**
     * 勘测结果
     */
    @ApiModelProperty("勘测结果")
    private Survey survey;
    /**
     * 检测结果
     */
    @ApiModelProperty("检测结果")
    private Detection detection;
    /**
     * 换机类型
     */
    @ApiModelProperty("换机类型")
    private Exchange exchange;
    /**
     * 退货类型
     */
    @ApiModelProperty("退货类型")
    private Retund retund;

    /**
     * 勘测结果
     */
    @Data
    @ApiModel("勘测结果")
    public static class Survey {
        /**
         * 是否满足安装 0：不满足，1：满足
         */
        @ApiModelProperty("是否满足安装")
        private Integer state ;
        /**
         * 若不满足安装，不满足安装的原因
         */
        @ApiModelProperty("原因")
        private String remark;
    }

    /**
     * 邮寄地址
     */
    @Data
    @ApiModel("邮寄地址")
    public static class ReturnFactoryExpressVO {
        /**
         * 快递单号
         */
        @ApiModelProperty("快递单号")
        private String expressCode;
        /**
         * 快递公司编号
         */
        @ApiModelProperty("快递公司编号")
        private String expressCompanyCode;
        /**
         * 快递公司名称
         */
        @ApiModelProperty("快递公司名称")
        private String expressCompany;
        /**
         * 发货时间
         */
        @ApiModelProperty("发货时间")
        private String expressTime;
    }

    /**
     * 检测结果
     */
    @Data
    @ApiModel("检测结果")
    public static class Detection {
        /**
         * 检测类型有：DAP；DOA
         */
        @ApiModelProperty("检测类型")
        private Integer type;
        /**
         * 检测结果
         */
        @ApiModelProperty("检测结果")
        private String remark;
    }

    /**
     * 换机类型
     */
    @Data
    @ApiModel("换机类型")
    public static class Exchange {
        /**
         * 换机类型有：DAP；DOA；多维换机
         * 值为0，表示不予换机
         */
        @ApiModelProperty("换机类型")
        private Integer type;
        /**
         * 新设备SN码
         */
        @ApiModelProperty("新设备SN码")
        private String newsn;
        /**
         * 新物料编码（机器的机型编码）
         */
        @ApiModelProperty("新物料编码")
        private String newproductCode;
    }

    /**
     * 退货类型
     */
    @Data
    @ApiModel("退货类型")
    public static class Retund {
        /**
         * 退货类型有：7天无理由、质量问题、发错货退货
         *  值为0，表示不予退货
         */
        @ApiModelProperty("退货类型")
        private Integer type;
    }
}
